package net.synck.gcontacts;

import net.synck.gcontacts.preferences.SecurePreferenceStore;

import org.eclipse.equinox.security.storage.ISecurePreferences;
import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import com.google.gdata.client.contacts.ContactsService;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

	// The plug-in ID
	public static final String PLUGIN_ID = "net.synck.gcontacts";

	// The shared instance
	private static Activator plugin;

	private static final String CLIENT_ID = "net.synck-eclipsegcontacts-0.1";
	
	private ContactsService contactsService;
	
	private SecurePreferenceStore securePreferenceStore;
	
	private boolean isGoogleServiceAuthenticated = false;
	
	/**
	 * The constructor
	 */
	public Activator() {
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
		super.start(context);
		plugin = this;
		contactsService = new ContactsService(CLIENT_ID);
	}
		
	public boolean isGoogleServiceAuthenticated() {
		return isGoogleServiceAuthenticated;
	}

	public void setGoogleServiceAuthenticated(boolean isGoogleServiceAuthenticated) {
		this.isGoogleServiceAuthenticated = isGoogleServiceAuthenticated;
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
		contactsService = null;
		plugin = null;				
		super.stop(context);
	}

	/**
	 * Returns the shared instance
	 *
	 * @return the shared instance
	 */
	public static Activator getDefault() {
		return plugin;
	}

	/**
	 * Returns an image descriptor for the image file at the given
	 * plug-in relative path
	 *
	 * @param path the path
	 * @return the image descriptor
	 */
	public static ImageDescriptor getImageDescriptor(String path) {
		return imageDescriptorFromPlugin(PLUGIN_ID, path);
	}

	public ContactsService getContactsService() {
		return contactsService;
	}
	
	public SecurePreferenceStore getSecurePreferenceStore() {
		if (securePreferenceStore == null) {
			ISecurePreferences root = SecurePreferencesFactory.getDefault();
 			ISecurePreferences node = root.node(Activator.getDefault().PLUGIN_ID);
 			securePreferenceStore = new SecurePreferenceStore(node);
		}
 		return securePreferenceStore; 
	}
	
}
